﻿@page "/custs"
@using GMS.NET.Web.Components.Pages.Systems.Custs.Shared
@using GMS.NET.Dto.System.Custs.Shared
@using GMS.NET.Dto.System.Custs.Enums
@attribute [TabItemOption(Text = "客户管理")]

<Card IsShadow="true" HeaderText="客户管理">
    <BodyTemplate>
        @if (IsShowNotes)
        {
            <Table TItem="CustsData" IsBordered="true" IsStriped="true" IndentSize="8" HeaderStyle="@TableHeaderStyle.Light"
                   TreeIcon="fa-solid fa-circle-chevron-right" OnQueryAsync="@OnQueryAsync" ShowToolbar="true" ShowExtendButtons="true" OnSaveAsync="@OnSaveAsync" OnDeleteAsync="@OnDeleteAsync" ShowEditButton="false"
                   EditDialogIsDraggable="true" AddModalTitle="新增用户" EditModalTitle="编辑用户" ShowEmpty="true" IsPagination="true" IsMultipleSelect="true" PageItemsSource="@(new int[] { 20, 40, 80, 100 })" SetRowClassFormatter="@SetRowClassFormatter"
                   SearchMode="SearchMode.Top" ShowSearch="true" ShowSearchText="false" CustomerSearchModel="@custsSearchModel"
                   @ref="Table"
                   ShowEditButtonCallback="@((context) => context.Cust_Status != Cust_Status.delete)"
                   ShowDeleteButtonCallback="@((context) => context.Cust_Status != Cust_Status.delete)">
                <TableToolbarTemplate>
                    <TableToolbarButton TItem="CustsData"
                                        Color="Color.Warning"
                                        Icon="fa-fw fa-solid fa-pen-to-square"
                                        Text="恢复"
                                        IsAsync OnClickCallback="@RecoverCusts" />
                </TableToolbarTemplate>
                <TableColumns>
                    <TableColumn @bind-Field="@context.Cust_Name" Sortable />
                    <TableColumn @bind-Field="@context.Cust_FullName" />
                    <TableColumn @bind-Field="@context.Cust_Type" />
                    <TableColumn @bind-Field="@context.Cust_Address" />
                    <TableColumn @bind-Field="@context.Cust_Status">
                        <Template Context="value">
                            @if (value.Value == Cust_Status.delete)
                            {
                                <Badge Color="Color.Danger">删除</Badge>
                            }
                            else
                            {
                                <Switch Value="@(value.Value==Cust_Status.normal)" ValueChanged="(val)=>CustsStatusOnChanged(val,value.Row.Id)"
                                        OnColor="Color.Success" OnText="正常" OffText="禁用"></Switch>
                            }
                        </Template>
                    </TableColumn>
                    <TableColumn @bind-Field="@context.Cust_Deltime">
                        <Template Context="value">
                            @{
                                if (value.Value is not null)
                                {
                                    <span style="color:red;">将在 @value.Value.Value.AddDays(3) 销毁</span>
                                }
                                else
                                {
                                    <span style="color:green;">长期可用</span>
                                }
                            }
                        </Template>
                    </TableColumn>
                    <TableColumn @bind-Field="@context.Cust_Email" />
                    <TableColumn @bind-Field="@context.Cust_Phone" />
                    <TableColumn @bind-Field="@context.Cust_Remark" />
                </TableColumns>
                <EditTemplate Context="value">
                    <CustsForm Context="value" />
                </EditTemplate>
                <CustomerSearchTemplate>
                    @if (context is CustsSearchModel model)
                    {
                        <CustsSearch @bind-Value="@model" />
                    }
                </CustomerSearchTemplate>
            </Table>
        }
        else
        {
            <Card>
                <BodyTemplate>
                    <h5 class="card-title">客户信息操作须知</h5>
                    <p class="card-text">在您注册新的客户时，系统会为该客户分配资源来供您使用该系统以及存储您的数据，并与其他客户的数据100%隔离。在您删除该用户时，因为该资源可能存储一些敏感数据或是您一时疏忽操作，您的资源在您删除该客户时会为您保留3天，3天内提供可以恢复该客户的资源以及所有数据的功能，如果3天内没有恢复则将会永久性删除，包括您存储的数据，即使您创建了新的客户与该客户的信息是一致的，也无法恢复数据，因此删除客户请慎重抉择。</p>
                    <p class="card-text">选择“我已知道”即代表您对该信息已明确，如果是因为您的操作引发的一些问题，则所有的损失需要您来的承担。</p>
                    <div><Checkbox TValue="string" OnStateChanged="@OnStateChanged" DisplayText="我已知道" ShowAfterLabel="true" Color="Color.Danger" State="CheckboxState.UnChecked" Size="Size.Medium" /></div>
                </BodyTemplate>
            </Card>
        }
    </BodyTemplate>
</Card>

<style>
    .custsdelete {
        --bs-table-striped-bg: darkgray;
        --bs-table-bg: darkgray;
        --bs-table-hover-bg: darkgray;
        --bs-table-striped-color: white;
        --bs-table-color-state: white;
        --bs-table-hover-color: white;
    }
</style>
@code{
    private static string? SetRowClassFormatter(CustsData item) => item.Cust_Status == Cust_Status.delete ? "custsdelete" : null;
}
